/** =========== Projeto Integrado de Fundamentos de Programação==========
 * Turma: GTI 2012 N / 1 Semestre
 * 
 * Alunos envolvidos no Projeto Integrado:
 * - Breno Alves de Oliveira
 * - Brunno Alves dos Santos
 * - Lincoln Aguiar
 * - Raphael Albuquerque **/

package br.edu.infnet;

import javax.swing.JOptionPane;

public class ProjetoIntegrado {

    /**
     * Projeto integrado - Segundo Ciclo *
     */

    public static void main(String[] args) {

        /**
         * Declaração de Variáveis *
         */
        int numeroElementos = -1, calcularProgram = 0;
        String tituloJanela = "Projeto Integrado - Teste de Benchmark";



        /**
         * Início do Laço Principal do Programa *
         */
        while (true) {
            /**
             * Validação da Faixa de Numeração Correta *
             */
            while (numeroElementos < 1 | numeroElementos > 1000000) {
                /**
                 * Tratamento do erro, caso o usuário digite números reais não
                 * inteiros *
                 */
                try {

                    String antesString = JOptionPane.showInputDialog(null, "Insira um número de elementos de 1 até 1.000.000:", tituloJanela, JOptionPane.QUESTION_MESSAGE);
                    /* Verificando se o botão CANCEL ou o FECHAR foram pressionados */
                    if(antesString == null){
                        System.exit(0);
                    }
                    /* Depois de verificado, transformando a String em Inteiro */
                    numeroElementos = Integer.parseInt(antesString);
                    ValidaCampos method = new ValidaCampos();
                    method.validaCampo1(numeroElementos, tituloJanela);
                } catch (NumberFormatException nfe) {
                    JOptionPane.showMessageDialog(null, "Valor não permitido!", tituloJanela, JOptionPane.ERROR_MESSAGE);
                }

                /**
                 * Fim do Tratamento *
                 */
            }

            /**
             * Seleção de Opção de Resultados sem necessidade de validação por
             * ser uma Lista
             */
            Object[] opcoes = {"1", "2", "3"};
            while (calcularProgram != 1 & calcularProgram != 2 & calcularProgram != 3) {
                String antesString2 = (String) JOptionPane.showInputDialog(null, "\nSelecione o número para a próxima função:\n\n |1| Calcular a soma de todos os elementos gerados \n\n |2| Opção 1 + encontrar o maior valor \n\n |3| Opção 2 + o menor valor", "Projeto Integrado - GTI2012N", JOptionPane.QUESTION_MESSAGE, null, opcoes, null);
                /* Verificando se o botão CANCEL ou o FECHAR foram pressionados */
                if (antesString2 == null){
                    System.exit(0);
                }
                /* Depois de verificado, transformando a String em Inteiro */
                calcularProgram = Integer.parseInt(antesString2);
            }
            
            /* Chamando o método que faz o benchmark */
            BenchMark executa = new BenchMark();
            executa.executaProcesso(numeroElementos, calcularProgram);
       


            /**
             * Zerando as variáveis que foram utilizadas nos cálculos, para
             * reinício do laço *
             */
            calcularProgram = 0;
            numeroElementos = -1;
            
            /**
             * Jogando um OptionDialog com a opção de executar outro Benchmark
             * ou Não, saindo do programa *
             */
            Object[] options = {"Sim", "Não"};
            int i = JOptionPane.showOptionDialog(null,
                    "Deseja efetuar outro Benchmark?", tituloJanela,
                    JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null,
                    options, options[0]);
            if (i == JOptionPane.NO_OPTION) {
                System.exit(0);
            }



        }
    }
}
